package org.lanqiao.tjut.aop;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class MyAOPManager {

	/**
	 * @Pointcut 用于声明切入点 在@AspectJ注解风格的AOP中 一个切入点签名通过一个普通的方法来定义 1
	 *           作为切入点签名的方法必须返回void类型 2 方法没有参数 用private修饰 3 方法体为空
	 * 
	 *           切入点表达式的写法 execution(主要)表示匹配方法执行的连接点 例如: *
	 *           org.lanqiao.tjut.service..*.print*(..)) 
	 *           1 "*" 表示方法的返回类型任意 
	 *           2 org.lanqiao.tjut.service..* 表示service包及其子包中所有的类
	 *           3 .print*表示类中所有以print开头的方法
	 *           4 (..) 表示参数是任意数量
	 */
	//将之前applicationConfigure.xml中的aop配置挪过来
	@Pointcut("execution(* org.lanqiao.tjut.service..print*(..))")
	private void userManagerPointut() {
	}

	/**
	 * 通知前处理
	 * Before 前置通知 在方法调用前执行 
	 * userManagerPointut() 表示前面定义的切入点 
	 * args -限定匹配特定的连接点（使用Spring AOP的时候方法的执行），其中参数是指定类型的实例. 
	 * username,psw 参数表示指定类型的实例 
	 *    * 参数名称必须与通知的参数名称一致 
	 *    * 通知参数的类型必须与目标对象参数的类型一致,如不一致，拦截不到
	 */
	@Before("userManagerPointut()")//&& args(username,psw)  参数不限定
	public void doAopBusiness() {//&& args(username,psw)  不需要传参
		System.out.println("进行安全检查 ...");
	}
	
}
